home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / xpandisk.zip / XPANBOSS.ASM < prev    next >
Assembly Source File  |  1988-10-31  |  6KB  |  140 lines

  1. ;  XpanBoss: the control program for the XPANDISK.SYS
  2. ;  virtual disk expanded memory device driver. PC Magazine 10-31-88
  3.  
  4. _TEXT          SEGMENT PUBLIC 'CODE'
  5.                ASSUME  CS:_TEXT,DS:_TEXT
  6.                ASSUME  ES:_TEXT,SS:_TEXT
  7.                ORG     100H
  8.  
  9. START:         JMP     MAIN
  10.  
  11. COPYRIGHT      DB      CR,LF,"XPANBOSS 1.0 (C) 1988 Ziff Communications Co."
  12. PROGRAMMER     DB      CR,LF,"PC Magazine ",BOX," Michael J. Mefford",CR,LF,LF
  13.  
  14. DB "Syntax: XPANBOSS [d:][/D disk size][/S sector size][/E entries]"
  15. DB "[/W][/R][/M][/A]",CR,LF,LF
  16. DB "disk size   = (16 - 32768)K bytes; default = 64",CR,LF
  17. DB "sector size = (128,256,512) bytes; default = 256",CR,LF
  18. DB "entries     = (4 - 512)in root directory; default = 64",CR,LF
  19. DB "/W = Change size WITHOUT asking. WARNING: All data will be lost.",CR,LF
  20. DB "/R = Read-only drive",CR,LF
  21. DB "/M = Minimum disk size (16K)",CR,LF
  22. DB "/A = All of available expanded memory",CR,LF,LF
  23.  
  24. DB "Use XPANBOSS to control the XPANDISK virtual disk",CR,LF,"$"
  25.  
  26. BELL           EQU     7
  27. CR             EQU     13
  28. LF             EQU     10
  29. CTRL_Z         EQU     26
  30. SPACE          EQU     32
  31. BOX            EQU     254
  32. Y_SCAN         EQU     15H
  33.  
  34. DRIVE          EQU     5CH
  35.  
  36. PASSWORD               DB      "PC Magazine Productivity"
  37. PASSWORD_LENGTH        EQU     $ - PASSWORD
  38. PIPE                   DB      PASSWORD_LENGTH + 1 DUP (?)
  39.  
  40. DRIVE_MSG      DB      "Drive $"
  41. ILLEGAL_MSG    DB      ": does not belong to XPANBOSS",BELL,CR,LF,"$"
  42. WARNING_MSG1   DB      CR,LF,"WARNING: All current data of $"
  43. WARNING_MSG2   DB      ": will be lost.",CR,LF
  44.                DB      "Do you wish to continue?  Y/N $"
  45. FAILED_MSG     DB      "UNSUCCESSFUL"
  46. CRLF           DB      CR,LF,"$"
  47.  
  48. ;----------------------------------------------------------------------
  49. MAIN           PROC    NEAR
  50.  
  51.                CLD                             ;All string moves forward.
  52.                MOV     DX,OFFSET COPYRIGHT     ;Display copyright.
  53.                CALL    PRINT_STRING
  54.  
  55.                MOV     BL,DS:[DRIVE]           ;Retrieve drive request.
  56.                MOV     AL,BL                   ;Save it.
  57.                DEC     AL                      ;Was there a drive request?
  58.                JNS     GOT_DRIVE               ;If yes, use it.
  59.  
  60.                MOV     AH,19H                  ;Else, get default drive.
  61.                INT     21H
  62.  
  63. GOT_DRIVE:     ADD     AL,"A"                  ;Convert to ASCII.
  64.                MOV     DS:[DRIVE],AL                  ;Save it and
  65.                MOV     BYTE PTR DS:[DRIVE + 1],"$"    ; convert to DOS string.
  66.  
  67.                MOV     DX,OFFSET PIPE          ;Request password from
  68.                MOV     SI,DX                   ; block device driver.
  69.                MOV     CX,PASSWORD_LENGTH
  70.                MOV     AX,4404H                ;IOCTL Read from block device.
  71.                INT     21H
  72.  
  73.                MOV     DI,OFFSET PASSWORD      ;Did device driver return
  74.                REPZ    CMPSB                   ; required password?
  75.                JZ      CONTINUE                ;If yes, continue.
  76.  
  77.                MOV     DX,OFFSET CRLF          ;Else, CR and LF to next line.
  78.                CALL    PRINT_STRING
  79.                CALL    PRINT_DRIVE             ;Print requested drive.
  80.                MOV     DX,OFFSET ILLEGAL_MSG   ;Tell user drive does not
  81.                CALL    PRINT_STRING            ; belong to XPANBOSS.
  82.                JMP     SHORT ERROR_EXIT
  83.  
  84. CONTINUE:      CMP     BYTE PTR [SI],0         ;If Parameters not changed
  85.                JZ      PARAMETERS              ; or /W, skip warning.
  86.  
  87.                CALL    WARNING                 ;Else, warn user.
  88.                JNZ     EXIT                    ;Exit if user said no.
  89.                MOV     DX,OFFSET CRLF          ;Else, CR, LF to next line.
  90.                CALL    PRINT_STRING
  91.  
  92. PARAMETERS:    MOV     DX,OFFSET PASSWORD      ;Send counter password as
  93.                MOV     CX,PASSWORD_LENGTH      ; OK to XPANDISK.
  94.                MOV     AX,4405H                ;IOCTL Write to block device.
  95.                INT     21H
  96.                MOV     AL,0                    ;ERRORLEVEL = 0.
  97.                JNC     EXIT                    ;If successful, exit.
  98.  
  99.                MOV     DX,OFFSET FAILED_MSG    ;Else, tell user it failed.
  100.                CALL    PRINT_STRING
  101. ERROR_EXIT:    MOV     AL,1                    ;ERRORLEVEL = 1.
  102.  
  103. EXIT:          PUSH    AX                      ;Save ERRORLEVEL.
  104.                MOV     DX,OFFSET CRLF          ;Blank line.
  105.                CALL    PRINT_STRING
  106.                POP     AX                      ;Retrieve ERRORLEVEL.
  107.                MOV     AH,4CH                  ;Exit.
  108.                INT     21H
  109.  
  110. MAIN           ENDP
  111.  
  112. WARNING:       MOV     DX,OFFSET WARNING_MSG1  ;Display warning message.
  113.                CALL    PRINT_STRING
  114.                CALL    PRINT_DRIVE
  115.                MOV     DX,OFFSET WARNING_MSG2
  116.                CALL    PRINT_STRING
  117.  
  118.                XOR     AH,AH                   ;Get a keystroke.
  119.                INT     16H
  120.                CMP     AH,Y_SCAN               ;"Y" key pressed?
  121.                JNZ     WARNING_END             ;If no, quick exit.
  122.                MOV     AH,0EH                  ;Else, display key pressed.
  123.                INT     10H
  124.                XOR     AH,AH                   ;Retrieve another keystroke.
  125.                INT     16H
  126.                CMP     AL,CR                   ;Requires a confirming Enter.
  127.  
  128. WARNING_END:   RET
  129.  
  130. PRINT_DRIVE:   MOV     DX,OFFSET DRIVE_MSG
  131.                CALL    PRINT_STRING
  132.                MOV     DX,5CH                  ;Requested drive.
  133.  
  134. PRINT_STRING:  MOV     AH,9
  135.                INT     21H
  136.                RET
  137.  
  138. _TEXT          ENDS
  139.                END     START
  140.